Sitemap.xml 配置与使用指南
💡 前置阅读建议
本文档专注于 Sitemap.xml 的配置规范。如需了解 SEO 基础知识、常用工具或完整优化策略,请先阅读 SEO 核心技术与优化实战。提交方法请参考 robots.txt 配置指南。
一、核心要点速览
💡 本文件核心考点
- Sitemap 作用:帮助搜索引擎发现和索引网站所有重要页面
- 提交渠道:Google Search Console、百度搜索资源平台、Bing Webmaster
- 格式要求:XML 标准格式,包含 URL、最后修改时间、更新频率、优先级
- 自动生成:VitePress/Webpack/其他构建工具可自动生成
- 大小限制:单个文件不超过 50MB 或 50,000 个 URL,超出需拆分
- 索引 Sitemap:大型网站可使用 Sitemap 索引文件管理多个子 Sitemap
二、什么是 Sitemap?
基本概念
Sitemap(站点地图) 是一个 XML 文件,列出网站上所有重要页面的 URL,以及关于每个 URL 的附加信息,帮助搜索引擎更智能地抓取网站。
工作原理:
搜索引擎爬虫流程:
1. 访问网站 → 发现 robots.txt 中的 Sitemap 引用
2. 或从 Search Console 获取提交的 Sitemap
3. 解析 XML 文件,提取 URL 列表
4. 根据优先级和更新频率安排抓取计划
5. 索引新发现的页面主要价值:
| 价值 | 说明 | 适用场景 |
|---|---|---|
| 发现页面 | 帮助搜索引擎找到所有重要页面 | 新网站、内容深的网站 |
| 提供元数据 | 告知最后更新时间、更新频率 | 频繁更新的网站 |
| 优化抓取预算 | 优先抓取高优先级页面 | 大型网站、电商网站 |
| 多媒体内容 | 提交图片、视频等特殊内容 | 媒体丰富型网站 |
| 多语言支持 | 标注 hreflang 关系 | 国际化多语言站点 |
三、Sitemap XML 格式详解
基础结构
xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2025-03-31T10:00:00+08:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/about</loc>
<lastmod>2025-03-30T15:30:00+08:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>元素说明
| 元素 | 必需/可选 | 说明 | 示例值 |
|---|---|---|---|
<urlset> | 必需 | 根元素,包含命名空间声明 | xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" |
<url> | 必需 | 每个 URL 的容器 | - |
<loc> | 必需 | 页面的完整 URL | https://example.com/page |
<lastmod> | 可选(强烈推荐) | 最后修改时间(ISO 8601 格式) | 2025-03-31T10:00:00+08:00 |
<changefreq> | 可选 | 更新频率提示 | always, hourly, daily, weekly, monthly, yearly, never |
<priority> | 可选 | 相对优先级(0.0-1.0) | 1.0(首页),0.8(重要页),0.5(普通页) |
更新频率参考值
| 值 | 含义 | 适用页面 |
|---|---|---|
always | 总是变化 | 实时数据流、股票行情 |
hourly | 每小时更新 | 新闻头条、天气 |
daily | 每天更新 | 博客首页、新闻分类页 |
weekly | 每周更新 | 大部分内容页面 |
monthly | 每月更新 | 关于我们、联系方式 |
yearly | 每年更新 | 历史档案、旧文章 |
never | 从不更新 | 永久链接、版本归档 |
四、高级 Sitemap 类型
1. 图片 Sitemap
xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/product-gallery</loc>
<image:image>
<image:loc>https://example.com/images/product-1.jpg</image:loc>
<image:caption>产品主图 - 展示产品正面</image:caption>
<image:title>产品 A 主视图</image:title>
<image:geo_location>北京市朝阳区</image:geo_location>
<image:license>CC BY-SA 4.0</image:license>
</image:image>
<image:image>
<image:loc>https://example.com/images/product-2.jpg</image:loc>
<image:caption>产品侧面图</image:caption>
</image:image>
</url>
</urlset>图片 Sitemap 最佳实践:
✓ 每个 URL 可包含多个图片(建议不超过 1000 个)
✓ 图片 URL 必须可公开访问
✓ 添加描述性 caption 和 title
✓ 地理位置信息对旅游/房地产网站有价值
✓ 版权信息避免侵权风险
❌ 不要包含缩略图(尺寸过小)
❌ 不要包含装饰性图片
❌ 避免重复提交相同图片2. 视频 Sitemap
xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://example.com/vue-tutorial-ep1</loc>
<video:video>
<video:thumbnail_loc>https://example.com/thumbnails/vue-ep1.jpg</video:thumbnail_loc>
<video:title>Vue.js 入门教程 - 第一集</video:title>
<video:description>系统学习 Vue.js 的第一课,涵盖安装、第一个应用、数据绑定等基础知识</video:description>
<video:content_loc>https://example.com/videos/vue-ep1.mp4</video:content_loc>
<video:player_loc>https://example.com/player/vue-ep1</video:player_loc>
<video:duration>PT15M30S</video:duration>
<video:expiration_date>2026-12-31T23:59:59+08:00</video:expiration_date>
<video:rating>4.8</video:rating>
<video:view_count>125000</video:view_count>
<video:publication_date>2025-01-15T10:00:00+08:00</video:publication_date>
<video:tag>Vue.js</video:tag>
<video:tag>前端教程</video:tag>
<video:category>教育</video:category>
<video:family_friendly>yes</family_friendly>
<video:restriction relationship="allow">CN US</video:restriction>
<video:price currency="CNY">0.00</video:price>
<video:requires_subscription>no</requires_subscription>
<video:uploader>张三老师</video:uploader>
<video:live>no</live>
</video:video>
</url>
</urlset>视频 Sitemap 关键要素:
| 元素 | 重要性 | 说明 |
|---|---|---|
thumbnail_loc | ⭐⭐⭐⭐⭐ | 视频缩略图(必须符合 Google 要求) |
title | ⭐⭐⭐⭐⭐ | 视频标题(清晰描述内容) |
description | ⭐⭐⭐⭐⭐ | 详细描述(前 2-3 句最关键) |
content_loc / player_loc | ⭐⭐⭐⭐⭐ | 至少提供一个(二选一) |
duration | ⭐⭐⭐⭐ | ISO 8601 格式(PT15M30S = 15 分 30 秒) |
3. 多语言 Sitemap(带 hreflang)
xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<!-- 中文首页 -->
<url>
<loc>https://example.com/zh/</loc>
<lastmod>2025-03-31T10:00:00+08:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://example.com/ja/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/"/>
</url>
<!-- 英文首页 -->
<url>
<loc>https://example.com/en/</loc>
<lastmod>2025-03-31T10:00:00+08:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<xhtml:link rel="alternate" hreflang="zh" href="https://example.com/zh/"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://example.com/ja/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/"/>
</url>
<!-- 日文首页 -->
<url>
<loc>https://example.com/ja/</loc>
<lastmod>2025-03-31T10:00:00+09:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<xhtml:link rel="alternate" hreflang="zh" href="https://example.com/zh/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/"/>
</url>
</urlset>hreflang 规则:
✓ 每个页面必须包含所有语言版本的链接(包括自己)
✓ 双向对应(A 指向 B,B 也必须指向 A)
✓ x-default 指定默认语言(当用户语言不匹配时)
✓ 语言代码使用 ISO 639-1(zh, en, ja)
✓ 地区代码使用 ISO 3166-1(zh-CN, zh-TW, en-US)4. Sitemap 索引文件(大型网站)
当网站 URL 超过 50,000 个或文件超过 50MB 时,需要拆分为多个 Sitemap 并使用索引文件:
xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- 产品 Sitemap -->
<sitemap>
<loc>https://example.com/sitemap-products.xml</loc>
<lastmod>2025-03-31T10:00:00+08:00</lastmod>
</sitemap>
<!-- 博客文章 Sitemap -->
<sitemap>
<loc>https://example.com/sitemap-blog.xml</loc>
<lastmod>2025-03-30T15:30:00+08:00</lastmod>
</sitemap>
<!-- 分类页面 Sitemap -->
<sitemap>
<loc>https://example.com/sitemap-categories.xml</loc>
<lastmod>2025-03-29T09:00:00+08:00</lastmod>
</sitemap>
<!-- 静态页面 Sitemap -->
<sitemap>
<loc>https://example.com/sitemap-pages.xml</loc>
<lastmod>2025-03-28T12:00:00+08:00</lastmod>
</sitemap>
<!-- 图片 Sitemap -->
<sitemap>
<loc>https://example.com/sitemap-images.xml</loc>
<lastmod>2025-03-31T08:00:00+08:00</lastmod>
</sitemap>
</sitemapindex>Sitemap 索引结构示例:
网站架构:
└─ sitemap.xml (索引文件)
├─ sitemap-products.xml (产品 1-50000)
├─ sitemap-products-2.xml (产品 50001-100000)
├─ sitemap-blog.xml (博客文章)
├─ sitemap-categories.xml (分类页)
├─ sitemap-pages.xml (静态页)
└─ sitemap-images.xml (图片)五、VitePress 自动生成 Sitemap
方案一:使用 vitepress-plugin-sitemap(推荐)
安装依赖:
bash
pnpm add -D vitepress-plugin-sitemap配置文件:
typescript
// .vitepress/config.ts
import { defineConfig } from 'vitepress'
import { sitemapPlugin } from 'vitepress-plugin-sitemap'
export default defineConfig({
// ... 其他配置
// 启用插件
vitepressPlugin: [
sitemapPlugin({
hostname: 'https://vue-docs.cn',
outFile: 'sitemap.xml',
exclude: ['/migration/', '/private/'],
changefreq: 'daily',
priority: 0.8,
lastmod: true,
})
],
// 构建配置
build: {
// 确保生成后处理
postBuild: async () => {
console.log('✅ Sitemap 生成完成')
}
}
})插件选项说明:
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
hostname | string | 必需 | 网站域名(如 https://example.com) |
outFile | string | 'sitemap.xml' | 输出文件名 |
exclude | string[] | [] | 排除的路径(支持通配符) |
changefreq | string | 'monthly' | 默认更新频率 |
priority | number | 0.5 | 默认优先级 |
lastmod | boolean | true | 是否包含最后修改时间 |
方案二:自定义脚本生成
对于有特殊需求的场景,可以编写自定义脚本:
typescript
// scripts/generate-sitemap.ts
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const DOCS_DIR = path.resolve(__dirname, '../docs')
const OUTPUT_FILE = path.resolve(__dirname, '../dist/sitemap.xml')
interface Page {
url: string
lastmod: Date
changefreq: string
priority: number
}
async function getAllPages(): Promise<Page[]> {
const pages: Page[] = []
const hostname = 'https://vue-docs.cn'
// 递归扫描 docs 目录
function scanDir(dir: string, basePath: string = '') {
const files = fs.readdirSync(dir)
for (const file of files) {
if (file.startsWith('.')) continue
const filePath = path.join(dir, file)
const stat = fs.statSync(filePath)
if (stat.isDirectory()) {
scanDir(filePath, path.join(basePath, file))
} else if (file.endsWith('.md')) {
const fileName = file.replace('.md', '')
const urlPath = path.join(basePath, fileName === 'index' ? '' : fileName)
.replace(/\\/g, '/')
// 跳过排除路径
if (['migration', 'private'].some(ex => urlPath.includes(ex))) {
continue
}
const content = fs.readFileSync(filePath, 'utf-8')
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/)
let lastmod = stat.mtime
if (frontmatterMatch) {
const frontmatter = frontmatterMatch[1]
const dateMatch = frontmatter.match(/date:\s*(\d{4}-\d{2}-\d{2})/)
if (dateMatch) {
lastmod = new Date(dateMatch[1])
}
}
// 确定优先级和更新频率
let priority = 0.5
let changefreq = 'monthly'
if (urlPath === '') {
// 首页
priority = 1.0
changefreq = 'daily'
} else if (urlPath.startsWith('guide/')) {
// 指南类内容
priority = 0.8
changefreq = 'weekly'
} else if (urlPath.startsWith('api/')) {
// API 文档
priority = 0.7
changefreq = 'monthly'
}
pages.push({
url: `${hostname}/${urlPath}`,
lastmod,
changefreq,
priority
})
}
}
}
scanDir(DOCS_DIR)
return pages
}
function generateSitemapXML(pages: Page[]): string {
let xml = '<?xml version="1.0" encoding="UTF-8"?>\n'
xml += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n'
for (const page of pages) {
xml += ' <url>\n'
xml += ` <loc>${page.url}</loc>\n`
xml += ` <lastmod>${page.lastmod.toISOString()}</lastmod>\n`
xml += ` <changefreq>${page.changefreq}</changefreq>\n`
xml += ` <priority>${page.priority.toFixed(1)}</priority>\n`
xml += ' </url>\n'
}
xml += '</urlset>'
return xml
}
async function main() {
console.log('🚀 开始生成 Sitemap...')
const pages = await getAllPages()
console.log(`📄 共发现 ${pages.length} 个页面`)
const xml = generateSitemapXML(pages)
// 确保 dist 目录存在
const distDir = path.dirname(OUTPUT_FILE)
if (!fs.existsSync(distDir)) {
fs.mkdirSync(distDir, { recursive: true })
}
// 写入文件
fs.writeFileSync(OUTPUT_FILE, xml, 'utf-8')
console.log(`✅ Sitemap 已生成:${OUTPUT_FILE}`)
// 验证文件大小
const stats = fs.statSync(OUTPUT_FILE)
console.log(`📊 文件大小:${(stats.size / 1024).toFixed(2)} KB`)
}
main().catch(console.error)在 package.json 中添加脚本:
json
{
"scripts": {
"docs:build": "vitepress build docs",
"postbuild": "tsx scripts/generate-sitemap.ts"
}
}执行流程:
bash
# 构建完成后自动生成
pnpm docs:build
# 输出:
# 🚀 开始生成 Sitemap...
# 📄 共发现 156 个页面
# ✅ Sitemap 已生成:e:/vue/interview-guide/dist/sitemap.xml
# 📊 文件大小:28.45 KB方案三:Webpack/Vite 插件
如果使用其他构建工具,可使用现成插件:
Webpack 方案:
bash
pnpm add -D sitemap-webpack-pluginjavascript
// webpack.config.js
const SitemapPlugin = require('sitemap-webpack-plugin').default
module.exports = {
plugins: [
new SitemapPlugin({
base: 'https://example.com',
paths: [
'/',
'/about',
'/products',
{ path: '/products/:id', pages: [1, 2, 3] },
'/blog',
],
options: {
changefreq: 'daily',
priority: 0.8,
lastmod: new Date(),
},
}),
],
}Vite 方案:
bash
pnpm add -D vite-plugin-sitemaptypescript
// vite.config.ts
import { defineConfig } from 'vite'
import Sitemap from 'vite-plugin-sitemap'
export default defineConfig({
plugins: [
Sitemap({
hostname: 'https://example.com',
dynamicRoutes: ['posts', 'products'],
exclude: ['/admin', '/private'],
}),
],
})六、提交到搜索引擎
Google Search Console
步骤 1:验证网站所有权
txt
方法一:HTML 文件上传
1. 下载验证文件(googlexxxxxxxxxxxx.html)
2. 上传到网站根目录
3. 点击"验证"
方法二:HTML 标签
1. 复制 meta 标签
2. 添加到网站首页 <head>
3. 点击"验证"
方法三:DNS 记录
1. 添加 TXT 记录到域名 DNS
2. 等待生效(几分钟到几小时)
3. 点击"验证"步骤 2:提交 Sitemap
txt
1. 登录 Search Console
2. 选择对应属性
3. 左侧菜单 → 站点地图
4. 输入 sitemap.xml
5. 点击"提交"
成功标志:
✓ 状态显示"成功"
✓ 显示发现的 URL 数量
✓ 无错误警告监控指标:
| 指标 | 含义 | 健康值 |
|---|---|---|
| 已发现网址数 | Sitemap 中包含的 URL 总数 | 与实际页面数一致 |
| 已编入索引 | 被 Google 收录的页面数 | >80% |
| 错误数 | 无法抓取的 URL | 0 |
| 警告数 | 有问题但不影响索引 | 越少越好 |
百度搜索资源平台
步骤 1:站长验证
txt
1. 访问 ziyan.baidu.com
2. 添加网站(输入域名)
3. 选择验证方式:
- HTML 文件验证(推荐)
- CNAME 验证(需要 DNS 权限)
- HTML 标签验证
4. 完成验证步骤 2:提交 Sitemap
txt
方式一:普通提交
1. 进入"数据提交" → "网站提交"
2. 选择"Sitemap 提交"
3. 输入完整 URL:https://example.com/sitemap.xml
4. 点击"提交"
方式二:API 主动推送(推荐)
优点:实时推送,收录更快
实现:调用百度 API 批量推送 URL
curl -H 'Content-Type:text/plain' --data-binary @urls.txt \
"http://data.zz.baidu.com/urls?site=example.com&token=你的 token"API 推送脚本示例:
txt
#!/bin/bash
# baidu-push.sh
SITE="example.com"
TOKEN="your_token_here"
SITEMAP="sitemap.xml"
# 从 Sitemap 提取 URL
grep -oP '(?<=<loc>)[^<]+' "$SITEMAP" > urls.txt
# 推送给百度
curl -H 'Content-Type:text/plain' \
--data-binary @urls.txt \
"http://data.zz.baidu.com/urls?site=$SITE&token=$TOKEN"
echo "✅ 推送完成!"
cat urls.txt | wc -l
echo "个 URL 已提交"Bing Webmaster Tools
提交流程:
txt
1. 登录 www.bing.com/webmasters
2. 添加并验证网站
3. 左侧菜单 → Sitemaps
4. 点击"Add Sitemap"
5. 输入 URL 并提交特色功能:
| 功能 | 说明 | 价值 |
|---|---|---|
| IndexNow | 实时推送新 URL | 加速 Bing 收录 |
| SEO 报告 | 自动检测 SEO 问题 | 免费审计工具 |
| 关键词研究 | Bing 搜索数据 | 补充 Google 数据 |
七、最佳实践与常见问题
✅ 最佳实践清单
txt
【内容质量】
□ 只包含规范 URL(canonical)
□ 排除 noindex 页面
□ 排除 4xx/5xx 错误页面
□ 定期更新(建议每周)
□ 保持 URL 一致性(HTTP/HTTPS、WWW/非 WWW)
【技术细节】
□ 使用绝对 URL(包含域名)
□ UTF-8 编码
□ 正确的 XML 格式(通过验证)
□ robots.txt 中声明位置
□ 压缩为 .gz 格式(大文件)
【提交策略】
□ 同时提交到三大搜索引擎
□ 使用 IndexNow 实时推送
□ 监控收录率
□ 及时处理错误
□ 定期清理无效 URL❌ 常见错误
| 错误 | 后果 | 解决方案 |
|---|---|---|
| 包含重复 URL | 浪费抓取预算 | 使用 canonical 去重 |
| 包含 noindex 页面 | 搜索引擎困惑 | 排除这些页面 |
| URL 格式不一致 | 被视为不同页面 | 统一协议和子域 |
| 文件过大未拆分 | 超出限制被忽略 | 使用索引文件拆分 |
| 长期不更新 | 失去信任 | 设置定时任务更新 |
| 包含死链 | 降低质量评分 | 定期检查 404 |
常见问题解答
Q1: Sitemap 提交后多久能被收录?
txt
正常情况:
• Google: 几小时到几天
• 百度:1-7 天
• Bing: 1-3 天
影响因素:
✓ 网站权威性(高权威更快)
✓ 更新频率(经常更新更快)
✓ 服务器速度(快速响应更好)
✓ 内容质量(原创内容优先)
加速技巧:
• 使用 API 主动推送
• 社交媒体分享新内容
• 获取外部链接
• 保持规律更新节奏Q2: Sitemap 和 robots.txt 哪个更重要?
txt
两者互补,缺一不可:
robots.txt:
• 告诉爬虫"什么不能抓"
• 控制爬虫行为
• 节省抓取预算
Sitemap:
• 告诉爬虫"有什么可抓的"
• 帮助发现所有页面
• 提供元数据信息
正确做法:
1. robots.txt 禁止低价值页面
2. Sitemap 包含所有重要页面
3. 两者配合优化索引质量Q3: 动态生成的页面如何加入 Sitemap?
txt
方案一:数据库驱动
// Node.js 示例
async function generateSitemap() {
const products = await db.query('SELECT id, updated_at FROM products')
const urls = products.map(p => ({
url: `https://example.com/product/${p.id}`,
lastmod: p.updated_at
}))
return generateXML(urls)
}
方案二:CMS 集成
• WordPress: Yoast SEO 插件自动生成
• Strapi: 自定义 endpoint 输出 XML
• Contentful: 使用第三方服务
方案三:定时任务
• 每天凌晨 2 点重新生成
• 删除已下架商品
• 添加新发布文章Q4: 如何处理分页内容?
txt
错误做法:
❌ 将所有分页都加入 Sitemap
/articles?page=1
/articles?page=2
/articles?page=3
...会导致大量重复内容
正确做法:
✓ 仅包含"查看所有"页面
/articles/all (显示完整列表)
✓ 或使用 rel=next/prev
<link rel="next" href="/articles?page=2">
<link rel="prev" href="/articles?page=1">
✓ 或 Canonical 指向第一页
<link rel="canonical" href="/articles">八、性能优化
压缩 Sitemap
txt
# 压缩为 Gzip(可减少 70-80% 体积)
gzip -k sitemap.xml
# 生成 sitemap.xml.gz
# 在 robots.txt 中引用压缩版
Sitemap: https://example.com/sitemap.xml.gzNginx 配置:
nginx
location ~ \.xml\.gz$ {
gzip off;
add_header Content-Encoding gzip;
add_header Content-Type text/xml;
}CDN 加速
txt
部署策略:
1. 将 Sitemap 放到 CDN
2. 设置长缓存时间(7 天)
3. 更新时清除缓存
Cloudflare 示例:
✓ 自动缓存静态文件
✓ 全球节点加速
✓ 免费额度够用增量更新
对于大型网站,全量生成耗时过长,可实现增量更新:
typescript
// 只更新变化的部分
async function updateSitemapIncrementally() {
const existingSitemap = await loadSitemap()
const newPages = await getNewPagesSinceLastUpdate()
const modifiedPages = await getModifiedPagesSinceLastUpdate()
// 添加新页面
for (const page of newPages) {
existingSitemap.addUrl(page)
}
// 更新修改的页面
for (const page of modifiedPages) {
existingSitemap.updateUrl(page)
}
// 保存更新
await saveSitemap(existingSitemap)
}九、总结
记忆口诀
txt
Sitemap 使用歌诀:
XML 格式要标准,
UTF-8 编码别忘记。
Loc 元素是必须,
Lastmod 时间加上好!
Changefreq 设频率,
Priority 定优先。
图片视频特殊待,
多语言站 hreflang!
VitePress 用插件,
自动生成省力气。
Search Console 提交,
百度平台也推送!
Robots 里面指路径,
CDN 上加速访问。
定期更新保新鲜,
错误监控及时修!总结一句话
- 核心价值: Sitemap = 搜索引擎的地图导航 🗺️
- 格式规范: XML 标准 + 必填元素 + 可选元数据 = 完整信息 📝
- 生成方式: 插件自动 + 脚本定制 + 构建集成 = 灵活选择 🛠️
- 提交渠道: Google + 百度 + Bing = 全覆盖 🌍
- 维护要点: 定期更新 + 错误监控 + 性能优化 = 持续有效 ✅